home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_pcdp / ada / phil1.ada < prev    next >
Text File  |  1996-01-30  |  915b  |  38 lines

  1. with Text_IO; use Text_IO;
  2. with Semaphore_Package; use Semaphore_Package;
  3. procedure Phil1 is
  4.  
  5.   type Node_ID is range 0..4;
  6.  
  7.   Fork: array(Node_ID) of Binary_Semaphore := (others => Init(1));
  8.  
  9.   task type Nodes is
  10.     entry Init(ID: Node_ID);
  11.   end Nodes;
  12.  
  13.   Node: array(Node_ID) of Nodes;
  14.  
  15.   task body Nodes is
  16.     I:           Node_ID;
  17.   begin
  18.     accept Init(ID: Node_ID) do
  19.       I := ID;
  20.     end Init;
  21.     for M in 1..5 loop
  22.       Put_Line(" " & Node_ID'Image(I) & " thinking");
  23.       Wait(Fork(I));
  24.       Put_Line(" " & Node_ID'Image(I) & " first fork taken");
  25.       Wait(Fork((I+1) mod 5));
  26.       Put_Line(" " & Node_ID'Image(I) & " critical section");
  27.       Signal(Fork(I));
  28.       Signal(Fork((I+1) mod 5));
  29.       Put_Line(" " & Node_ID'Image(I) & " forks released");
  30.     end loop;
  31.   end Nodes;
  32.  
  33. begin
  34.   for J in Node_ID loop
  35.     Node(J).Init(J);
  36.   end loop;
  37. end Phil1;
  38.